package orm

import (
	"bluebell_backend/settings"
	"database/sql"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var BlueBellDB *gorm.DB
var SqlDB *sql.DB

func InitOrmDB(setting *settings.MySQLConfig) error {
	var err error
	url := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		setting.User, setting.Password, setting.Host, setting.Port, setting.DB)
	BlueBellDB, err = gorm.Open(mysql.Open(url), &gorm.Config{
		// todo 添加sql语句执行日志
		Logger:logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		return err
	}

	SqlDB, err = BlueBellDB.DB()
	if err != nil {
		return err
	}
	SqlDB.SetMaxIdleConns(1000)
	SqlDB.SetMaxOpenConns(100000)
	SqlDB.SetConnMaxLifetime(-1)
	// todo 什么时候关闭sql连接比较合适,如何正确关闭连接

	// todo 自动迁移功能
	//blueBellDB.AutoMigrate(&User{})

	return nil
}


// 构建一个方法，供外界获取这个orm连接对象
func GetBlueBellDb() *gorm.DB {
	return BlueBellDB
}

// Close 关闭MySQL连接
func Close() {
	_ = SqlDB.Close()
}



